 /**
 * 逻辑、功能相关描述: <br>
 *
 * @author 付湘辉  <br>
 * 编写日期：2008-8-29  <br>
 */
package com.ce.pms.charge.service;

import java.util.List;

import com.ce.pms.base.service.IPmsBaseService;
import com.ce.pms.charge.vo.ChargeDetailSearchVO;
import com.ce.pms.charge.vo.CreditTransVO;
import com.ce.pms.charge.vo.DebitTransVO;
import com.ce.pms.charge.vo.AdjustTransactionVO;
import com.ce.pms.charge.vo.DepositTransSearchVO;
import com.ce.pms.charge.vo.DepositTransVO;
import com.ce.pms.charge.vo.LateFeeDetailVO;
import com.ce.pms.charge.vo.PrePaySchChargeVO;
import com.ce.pms.charge.vo.TransactionVO;
import com.sitechasia.webx.core.support.Page;

/**
 * 	名称: com.ce.pms.charge.service.ITransactionService <br>
 *
 *
 * @author  付湘辉  <br>
 * Created on： 2008-8-29 <br>
 * @author <br>
 * update on： <br>
 * why: <br>
 */
public interface ITransactionService extends IPmsBaseService {

	/**
	 * 功能描述:　
	 * 　<ul><li>添加一笔调整交易 </li></ul>
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-8-29  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public AdjustTransactionVO addAdjustTransaction(AdjustTransactionVO adjustTransVO);

	/**
	 * 功能描述: 添加一笔物业账户收费交易 <br>
	 * @param creditTransVO 实收交易VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-7  <br>
	 * Edit author:付湘辉  <br>
	 * Edit on:2009-1-7    <br>
	 * Why: 建议调用：addChargeTransactionReality    <br>
	 */
	@Deprecated
	public CreditTransVO addChargeTransaction(CreditTransVO creditTransVO);

	/**
	 * 功能描述: <ul><li>针对物业收费账户，添加一笔实际收费交易，
	 * 在参数creditTransVO中应该为accountHouseId属性赋值，
	 * accountHouseId属性是指账户所属房屋的ID,房屋可能是管理房或者产权房。 </li></ul>
	 * @param creditTransVO 实收交易VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public CreditTransVO addChargeTransactionReality(CreditTransVO creditTransVO);
	
	/**
	 * 功能描述: <ul><li>添加一笔应收本金交易，
	 * 除必须项外，在参数debitTransVO中应该为accountHouseId属性赋值，
	 * accountHouseId属性是指账户所属房屋的ID,房屋可能是管理房或者产权房。 </li></ul>
	 * @param debitTransVO 应收交易VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public DebitTransVO addDebitPrincipalTransaction(DebitTransVO debitTransVO);
	
	/**
	 * 功能描述: <ul><li>针对同一个物业帐户，批量新增应收本金交易，
	 * accountHouseId属性是指账户所属房屋的ID,房屋可能是管理房或者产权房。 </li></ul>
	 * @param operator 操作者ID
	 * @param accountHouseId 账户所属房屋的ID
	 * @param debitTransVOs 应收交易VO集
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<DebitTransVO> addDebitPrincipalTransactionBatch(Long operator,Long accountHouseId,List<DebitTransVO> debitTransVOs);
	
	/**
	 * 功能描述: <ul><li>针对押金(保证金)子账户，添加一笔押金收款交易，
	 * 在参数depositTransVO中应该为accountHouseId属性赋值，
	 * accountHouseId属性是指账户所属房屋的ID,房屋可能是管理房或者产权房。 </li></ul>
	 * @param depositTransVO 押金实收交易VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public DepositTransVO addDepositCharge(DepositTransVO depositTransVO);
	
	/**
	 * 功能描述: 针对预交款子账户，添加一笔预交款收款交易 <br>
	 * @param prePaySchChargeVO 预交款账户收款VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public PrePaySchChargeVO addPrePayChargeTransaction(PrePaySchChargeVO prePaySchChargeVO);
	
	/**
	 * 功能描述: 针对同一个预交款子账户，添加多笔预交款收款交易  <br>
	 * @param operator 操作者ID
	 * @param accountHouseId 账户所属房屋的ID
	 * @param prePaySchChargeVOs预交款账户收款VO集
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<PrePaySchChargeVO> addPrePayChargeTransactionBatch(Long operator,Long accountHouseId,List<PrePaySchChargeVO> prePaySchChargeVOs);

	/**
	 * 功能描述:　
	 * 　<ul><li>添加一笔本金交易 </li></ul>
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-8-29  <br>
	 * Edit author:付湘辉  <br>
	 * Edit on: 2009-1-07   <br>
	 * Why:建议使用接口：addDebitPrincipalTransaction     <br>
	 */
	@Deprecated
	public DebitTransVO addPrincipalTransaction(DebitTransVO debitTransVO);

	/**
	 * 功能描述:<ul><li>添加多笔本金交易 </li></ul>
	 * @param operator
	 * @param subAccountId
	 * @param debitTransVOs
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-12-29  <br>
	 * Edit author:付湘辉  <br>
	 * Edit on:2009-1-7     <br>
	 * Why:建议调用 addDebitPrincipalTransactionBatch    <br>
	 */
	@Deprecated
	public List<DebitTransVO> addPrincipalTransactionBatch(Long operator,Long subAccountId,List<DebitTransVO> debitTransVOs);

	/**
	 * 功能描述:　
	 * 　<ul><li>添加一笔减免交易 </li></ul>
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-8-29  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public AdjustTransactionVO addReliefTransaction(AdjustTransactionVO reliefTransVO);

	/**
	 * 功能描述: 检查指定的账户下是否有挂起的交易 <br>
	 * @param accountId 总账户id
	 * @return true 有  false 没有
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-11-6  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean checkAccountHasHangsTransaction(Long accountId);

	/**
	 * 功能描述: 根据主易id初始化一条调整交易VO,用于初始化调整操作 <br>
	 * @param transId 主交易id
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public AdjustTransactionVO getAdjustTransByMasterId(Long transId);

	/**
	 * 功能描述: 根据传入id查询一个实收交易，如果查出来不是实收交易将抛异常 <br>
	 * @param creditTransId
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public CreditTransVO getCreditTransVOById(Long creditTransId);

	/**
	 * 功能描述: 根据传入id查询一个实收交易，如果查出来不是实收交易将抛异常 <br>
	 * @param creditTransId
	 * @param withDetail 是否查询明细信息
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public CreditTransVO getCreditTransVOById(Long creditTransId,Boolean withDetail);

	/**
	 * 功能描述: 根据传入id查询一个应收交易，如果查出来不是应收交易将抛异常 <br>
	 * @param debitTransId
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public DebitTransVO getDebitTransVOById(Long debitTransId);

	/**
	 * 功能描述: 查询指定id的滞纳金的明细列表 <br>
	 * @param lateTransId
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-18  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<LateFeeDetailVO> getLateFeeDetailListById(Long lateTransId);

	/**
	 * 功能描述: 获取出盘锁定状态的交易数量 <br>
	 * @param status
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-10-8  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Integer getOutLocakTransactionCount();

	/**
	 * 功能描述: 根据主易id初始化一条减免交易VO,用于初始化减免操作 <br>
	 * @param transId 主交易id
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-4  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public AdjustTransactionVO getReliefTransByMasterId(Long transId);

	/**
	 * 功能描述: 查询指定条件的交易，用于显示列表 <br>
	 * @param searchVo
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-3  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<TransactionVO> getTransactionVoByConditions(ChargeDetailSearchVO searchVo);
	
	/**
	 * 功能描述:  针对同一个物业帐户，处理多次入账收费过程，每次过程包括增加应收和实收交易两个子业务。
	 * 除必须项外，在参数debitTransVOs中每个应收都应该包含交易码信息，
	 * 在creditTransVOs中每个实收都应该有交易码信息。 
	 * debitTransVOs中的数量应该与creditTransVOs中数量一致<br>
	 * @param operator 操作者ID
	 * @param accountHouseId 账户所属房屋的ID
	 * @param debitTransVO  应收交易VO集
	 * @param creditTransVO 实收交易VO集
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean handleMultiCharge(Long operator,Long accountHouseId,List<DebitTransVO> debitTransVOs,List<CreditTransVO> creditTransVOs);

	/**
	 * 功能描述:  针对同一个物业帐户，处理一次入账收费过程，包括增加应收和实收交易两个子业务。
	 * 除必须项外，在参数debitTransVO应包含交易码信息，
	 * 在creditTransVO中应有交易码信息。 <br>
	 * @param operator 操作者ID
	 * @param accountHouseId 账户所属房屋的ID
	 * @param debitTransVO  应收交易VO
	 * @param creditTransVO 实收交易VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean handleOneCharge(Long operator,Long accountHouseId,DebitTransVO debitTransVO,CreditTransVO creditTransVO);

	/**
	 * 功能描述: 挂起操作 <br>
	 * @param debitVo
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-17  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean hangsTransaction(DebitTransVO debitVo);

	/**
	 * 功能描述: 解除挂起操作 <br>
	 * @param debitVo
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-17  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean liftingHangsTransaction(DebitTransVO debitVo);
	
	/**
	 * 功能描述:进行一次押金抵冲过程，
	 * 先针对押金账户进行一次退款,再针对物业账户新增一笔应收和一笔实收交易，
	 * 并建立相应的交易关系。  <br>
	 * @param debitBusinessId 应收交易码ID
	 * @param creditBusinessId 实收交易码ID
	 * @param depositTransVO 押金VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-14  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean offsetOneDepositCharge(Long debitBusinessId,Long creditBusinessId,DepositTransVO depositTransVO);
	
	/**
	 * 功能描述:查询押金子账户的相关押金收款交易分页列表。  <br>
	 * @param depositTransSearchVO 押金子账户搜索VO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Page queryDepositTransVOByPage(DepositTransSearchVO depositTransSearchVO);
}
